ANGULAR
Complete Angular Tutorial For Beginners Introduction to Angular | What is Angular? Architecture Overview & Concepts of Angular How to Install Angular How to Create a new project in Angular Bootstrapping in Angular: How It Works Internally Angular Components Overview & Examples Data Binding in Angular Interpolation in Angular Property Binding in Angular Event Binding in Angular ngModel & Two way Data binding in Angular NgModelChange & Change Event in Angular Child/Nested Components in Angular angular directives angular ngFor directive ngSwitch, ngSwitchcase, ngSwitchDefa ult Angular Example How to use ngIf, else, then in Angular By example NgClass Example Conditionally apply class Angular ngStyle Directive Angular Trackby to improve ngFor Performance How to Create & Use Custom Directive In Angular Working with Angular Pipes How to Create Custom Pipe in Angular Formatting Dates with Angular Date Pipe Using Angular Async Pipe with ngIf & ngFor angular keyValue pipe Using Angular Pipes in Components or Services Angular Component Communication & Sharing Data Angular Pass data to child component Angular Pass data from Child to parent component Component Life Cycle Hooks in Angular Angular ngOnInit And ngOnDestroy Life Cycle hook Angular ngOnChanges life Cycle Hook Angular ngDoCheck Life Cycle Hook Angular Forms Tutorial: Fundamentals & Concep t s Angular Template-driven forms example How to set value in template-driven forms in Angular Angular Reactive Forms Example Using Angular FormBuilder to build Forms SetValue & PatchValue in Angular StatusChanges in Angular Forms ValueChanges in Angular Forms FormControl in Angular FormGroup in Angular Angular FormArray Example Nested FormArray Example Add Form Fields Dynamically SetValue & PatchValue in FormArray Angular Select Options Example in Angular Introduction to Angular Services Introduction to Angular Dependency Injection Angular Injector, @Injectable & @Inject Angular Providers: useClass, useValue, useFactory & useExisting Injection Token in Angular How Dependency Injection & Resolution Works in Angular Angular Singleton Service ProvidedIn root, any & platform in Angular @Self, @SkipSelf & @Optional Decorators Angular '@Host Decorator in Angular ViewProviders in Angular Angular Reactive Forms Validation Custom Validator in Angular Reactive Form Custom Validator with Parameters in Angular Inject Service Into Validator in Angular template_driven_form_validation_in_angular Custom Validator in Template Driven Forms in Angular Angular Async Validator Example Cross Field or Multi Field Validation Angular How to add Validators Dynamically using SetValidators in Angular Angular HttpClient Tutorial & Example Angular HTTP GET Example using httpclient Angular HTTP POST Example URL Parameters, Query Parameters, httpparams in Angular HttpClient Angular HTTPHeaders Example Understanding HTTP Interceptors in Angular Angular Routing Tutorial with Example Location Strategy in Angular Angular Route Params Angular : Child Routes / Nested Route Query Parameters in Angular Angular Pass Data to Route: Dynamic/Static RouterLink, Navigate & NavigateByUrl to Navigate Routes RouterLinkActive in Angular Angular Router Events ActivatedRoute in Angular Angular Guards Tutorial Angular CanActivate Guard Example Angular CanActivateChild Example Angular CanDeactivate Guard Angular Resolve Guard Introduction to Angular Modules or ngModule Angular Routing between modules Angular Folder Structure Best Practices Guide to Lazy loading in Angular Angular Preloading Strategy Angular CanLoad Guard Example Ng-Content & Content Projection in Angular Angular @input, @output & EventEmitter Template Reference Variable in Angular ng-container in Angular How to use ng-template & TemplateRef in Angular How to Use ngTemplateOutlet in Angular '@Hostbinding and @Hostlistener_in_Angular Understanding ViewChild, ViewChildren &erylist in Angular ElementRef in Angular Renderer2 Example: Manipulating DOM in Angular ContentChild and ContentChildren in Angular AfterViewInit, AfterViewChecked, AfterContentInit & AfterContentChecked in Angular Angular Decorators Observable in Angular using RxJs Create observable from a string, array & object in angular Create Observable from Event using FromEvent in Angular Using Angular observable pipe with example Angular Map Operator: Usage and Examples Filter Operator in Angular Observable Tap operator in Angular observable Using SwitchMap in Angular Using MergeMap in Angular Using concatMap in Angular Using ExhaustMap in Angular Take, TakeUntil, TakeWhile & TakeLast in Angular Observable First, Last & Single Operator in Angular Observable Skip, SkipUntil, SkipWhile & SkipLast Operators in Angular The Scan & Reduce operators in Angular DebounceTime & Debounce in Angular Delay & DelayWhen in Angular Using ThrowError in Angular Observable Using Catcherror Operator in Angular Observable ReTryWhen inReTry, ReTryWhen in Angular Observable Unsubscribing from an Observable in Angular Subjects in Angular ReplaySubject, BehaviorSubject & AsyncSubject in Angular Angular Observable Subject Example Sharing Data Between Components Angular Global CSS styles View Encapsulation in Angular Style binding in Angular Class Binding in Angular Angular Component Styles How to Install & Use Angular FontAwesome How to Add Bootstrap to Angular Angular Location Service: go/back/forward Angular How to use APP_INITIALIZER Angular Runtime Configuration Angular Environment Variables Error Handling in Angular Applications Angular HTTP Error Handling Angular CLI tutorial ng new in Angular CLI How to update Angular to latest version Migrate to Standalone Components in Angular Create Multiple Angular Apps in One Project Set Page Title Using Title Service Angular Example Dynamic Page Title based on Route in Angular Meta service in Angular. Add/Update Meta Tags Example Dynamic Meta Tags in Angular Angular Canonical URL Lazy Load Images in Angular Server Side Rendering Using Angular Universal The requested URL was not found on this server error in Angular Angular Examples & Sample Projects Best Resources to Learn Angular Best Angular Books in 2020

Introduction to Angular Modules or ngModule

The building blocks of Angular Applications consist of Components, Templates, Directives,Pipes, and Services. We build a lot of such blocks to create a complete application. As the application grows bigger in size managing these blocks become difficult. The Angular Provides a nice way to organize these blocks in a simple and effectively using Angular modules (Also known as ngModule).

The Module is an overloaded term. It means different things depending on the context. There are two kinds of modules that exist in Angular itself. One is the JavaScript Module and the other one is Angular Module.

What is Angular Module

The Angular module (also known as ngModule) helps us to organize the application parts into cohesive blocks of functionality. Each block focuses on providing a specific functionality or a feature.

The Angular module must implement a specific feature. The Components, Directives, Services that implement such a feature, will become part of that Module.

The Modular design helps to keep the Separation of concerns. Keep the features together. Makes it easy to maintain the code. Makes it easier to reuse the code.

The Angular itself is built on the concept of Modules. The @angular/core is the main Angular module, which implements Angular’s core functionality, low-level services, and utilities.

The Features like Forms, HTTP, and Routing are implemented as separate Feature modules such as FormsModule, HttpClientModule, and RouterModule. There are many third-party libraries built around Angular such as Material Design,Ionic, etc.

Angular Applications are assembled from the modules. The module exports Component, directive,service, pipe, etc, which can be then imported into another module

JavaScript Modules vs. NgModules

JavaScript Modules

The JavaScript Modules, which also go by the name JS modules or ES modules, or ECMAScript modules are part of the JavaScript Language. The JS Modules are stored in a file. There is exactly one module per file and one file per module. These modules contain small units of independent, reusable code. They export a value, which can be imported and used in some other module.

The following is a Javascript Module that exports the SomeComponent.

                              

export class SomeComponent { 
   //do something
}
 
                            
                        

The SomeOtherComponent is another JavaScript Module, that imports and uses the SomeComponent.

                              

import { SomeComponent } from './some.component';
 
export class SomeOtherComponent { 
   /do some other thing
}
 
                            
                        

How to Create an Angular Module

The Angular Module must declare the Components,Pipes, and Directives it manages. We Create the Angular Modules by decorating it with the ngModule decorator.

ngModule

The NgModule() decorator is a function that takes a single metadata object,whose properties describe the module. The most important properties are as follows.

                              

@NgModule({
  declarations: [  ],
  imports:      [  ],
  providers:    [  ],
  exports:      [  ],
  bootstrap:    [  ],
  entrycomponents: [ ]
})
 
                            
                        

Declarations array

This is where components, directives, and pipes that belong to this NgModule are declared.

Providers array

The Services, which you want to add to the global collection of services are added here. The services are then available for injection via dependency injection.

Imports array

If you want this ngModule require any feature or functionality, then those modules need to be imported here. Any components,directives, and pipes that are defined and exported in that module can be used in this module.

Exports array

If you want other modules to use the components, pipes, directives of this NgModule, then those must be specified here.

Bootstrap

The main component of this module, which needs to be loaded when the module is loaded is specified here.

EntryComponents

The components that are dynamically loaded needs to be declared here.

The components are loaded when angular

  • Finds the Component Selector in the HTML
  • Declared in the bootstrap array
  • Declared in the root definition
  • If your component is not listed any of the above, then it needs to be declared in EntryComponent so that Angular knows where to find them and compile them.

    The following image should make it clear, how the ngModule metadata works

    image

    Angular Module Example

    Create the application

                                  
     
    ng new --routing  --style css ModuleDemo
                                
                            

    Use npm start to run the program and test everything is ok.

                                  
    
    Cd ModuleDemo
    npm start
     
                                
                            

    The App Contains two Modules. i.e. AppModule & AppRoutingModule

    Routing Module

    The AppRoutingModule is an Angular Module, which specifically defines the application Routes

                                  
    
    import { NgModule } from '@angular/core';
    import { Routes, RouterModule } from '@angular/router';
     
    const routes: Routes = [];
     
    @NgModule({
      imports: [RouterModule.forRoot(routes)],
      exports: [RouterModule]
    })
    export class AppRoutingModule { }
    
                                
                            

    This module does not contain any components, pipes or directives. Hence it does not need to declare anything in the declaration array

    No services are part of this Module, Hence providers array is also not needed.

    The Angular RouterModule is needed for the routing to work, Hence it is imported. The Routermodule requires the routes to work, hence it is passed to the RouterModule in the forRoot method.

    Root Module

    The first module that gets loaded is called Root Module, which is conventionally named as AppModule and is automatically created by the Angular CLI.

    The following is the auto-generated code of the AppModule. The class is decorated with the @NgModule decorator

                                  
     
    import { BrowserModule } from '@angular/platform-browser';
    import { NgModule } from '@angular/core';
     
    import { AppRoutingModule } from './app-routing.module';
    import { AppComponent } from './app.component';
     
    @NgModule({
      declarations: [
        AppComponent
      ],
      imports: [
        BrowserModule,
        AppRoutingModule
      ],
      providers: [],
      bootstrap: [AppComponent]
    })
    export class AppModule { }
     
                                
                            

    The AppModule has only one component i.e AppComponent and it does not have any pipes or directives. Hence the declaration array contains only AppComponent

    The imports metadata should contain the other modules that are being used by this module. Hence it imports the BrowserModule, which is an Angular Library. It also requires Routes, hence we are importing AppRoutingModule

    The AppModule does not define any services. Hence the providers array is empty

    Finally, we need to load the AppComponent when the App starts, hence we define it in bootstrap array

    Creating a Module

    Let us add another Module to our above application.

    Create a folder home under src/app folder

    Components

    Let us add three components. HomeComponent, AboutUsComponent, ContactUsComponent.

    Create a folder called pages under the home folder. Create a three folder under pages aboutus, contactus & home.

    home/pages/aboutus/about-us.component.ts
                                  
    
    import { Component } from '@angular/core';
     
    @Component({
        templateUrl: './about-us.component.html',
    })
    export class AboutUsComponent
    {
    }
                                
                            
    home/pages/aboutus/about-us.component.html
                                  
     
    <h1> About Us Page</h1>
                                
                            
    home/pages/contactus/contact-us.component.ts
                                  
    
    import { Component } from '@angular/core';
     
    @Component({
        templateUrl: './contact-us.component.html',
    })
    export class ContactUsComponent
    {
    }
     
                                
                            
    home/pages/contactus/contact-us.component.html
                                  
     
    <h1> Contact Us</h1>
                                
                            
    home/pages/home/home.component.ts
                                  
    
    import { Component } from '@angular/core';
     
    @Component({
        templateUrl: './home.component.html',
    })
    export class HomeComponent
    {
    }
     
                                
                            
    home/pages/home/home.component.html
                                  
    
    <h1> Welcome To Module Demo</h1>
                                
                            
    home/pages/index.ts
                                  
     
    export * from './aboutus/about-us.component';
    export * from './contactus/contact-us.component';
    export * from './home/home.component';
     
                                
                            

    Home Module

    Now, our components are ready, we can now create the HomeModule

    Create the home.module.ts under the home folder

                                  
     
    import { NgModule } from '@angular/core';
    import { RouterModule, Routes } from '@angular/router';
    import { CommonModule } from '@angular/common';
     
    import { AboutUsComponent,ContactUsComponent,HomeComponent } from './pages';
     
    const routes: Routes = [
      {   path: '',   component: HomeComponent   },
      {   path: 'home',   component: HomeComponent   },
      {   path: 'contactus',   component: ContactUsComponent   },
      {   path: 'aboutus',   component: AboutUsComponent   },
    ];
     
    @NgModule({
      declarations: [AboutUsComponent,ContactUsComponent,HomeComponent],
      imports: [
        CommonModule,
        RouterModule.forChild(routes),
      ],
      providers: [],
    })
    export class HomeModule { }
     
                                
                            

    We decorate the HomeModule class with @NgModule to let Angular know that it is an Angular Module

    Next, use the declarations array to declare the three components that we have created.

    The HomeModule do not expose any services, hence we keep the providers array empty

    We are keeping the Routes in the module itself. You can create a separate routing module similar to the AppRoutingModule. That will help to keep the HomeModule code clean.

    HomeModule requires CommonModule hence it is added to the imports array. The RouterModule module is imported and routes are registered with the call to forChild(routes). forChild registered the routes but does not register any services.

    home/index.ts
                                  
    
    export * from './pages';
    export * from './home.module';
                                
                            

    Using HomeModule in AppModule

    The next step is to import the HomeModule in the AppModule. First import the HomeModule

                                  
    
    import { HomeModule} from './home';
                                
                            

    Next, add HomeModule to the imports metadata of the @ngModule

                                  
     
      imports: [
        BrowserModule,
        AppRoutingModule,
        HomeModule
      ],
     
                                
                            

    Next, we need to use the Components of the HomeModule. Open the app.component.ts and add the following code

                                  
     
    <ul>
      <li>
        <a class="navbar-brand" routerLink="/">Home</a>
      </li>
      <li>
          <a class="navbar-brand" routerLink="/aboutus">About</a>
      </li>
      <li>
        <a class="navbar-brand" routerLink="/contactus">Contact</a>
      </li>
    </ul>
     
    <router-outlet></router-outlet>
                                
                            

    All we have done is to use them routerLink to create a menu item.

    Copy the following CSS to app.component.css

                                  
     
    ul {
        list-style-type: none;
        margin: 0;
        padding: 0;
        overflow: hidden;
        background-color: #333333;
    }
     
    li {
        float: left;
    }
     
    li a {
        display: block;
        color: white;
        text-align: center;
        padding: 16px;
        text-decoration: none;
    }
     
    li a:hover {
        background-color: #111111;
    }
     
                                
                            

    Finally, run the app

    Summary

    In this tutorial, we learned what is Angular Modules are and how to create an Angular Module.